Traditional programmable computers use a von Neumann, or VN, architecture. The VN architecture, in its simplest form, comprises a central processing unit (CPU) and attached memory, usually with some form of input/output to allow useful operations. For example, FIG. 1 shows a computer 20 comprising a CPU 30, a memory controller 40, memory 50, and input/output (I/O) devices 60. CPU 30 sends data requests to memory controller 40 over address/control bus 42; the data itself passes over a data bus 44. Memory controller 40 communicates with memory 50 and I/O devices 60 to perform data reads and writes as requested by CPU 30 (or possibly by the I/O devices). Although not shown, the capability exists for various devices to “interrupt” the CPU and cause it to switch tasks.
In a VN machine, memory 50 stores both program instructions and data. CPU 30 fetches program instructions from the memory and executes the commands contained therein—typical instructions instruct the CPU to load data from memory to a register, write data to memory from a register, perform an arithmetic or logical operation using data in its onboard registers, or branch to a different instruction and continue execution. As can be appreciated, CPU 30 spends a great deal of time fetching instructions, fetching data, or writing data over data bus 44. Although elaborate (and usually costly) schemes can be implemented to cache data and instructions that might be useful, implement pipelining, and decrease average memory cycle time, data bus 44 is ultimately a bottleneck on processor performance.
The VN architecture is attractive, as compared to gate logic, because it can be made “general-purpose” and can be reconfigured relatively quickly; by merely loading a new set of program instructions, the function of a VN machine can be altered to perform even very complex functions, given enough time. The tradeoffs for the flexibility of the VN architecture are complexity and inefficiency. Thus the ability to do almost anything comes at the cost of being able to do a few simple things efficiently.